/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ru.prjpeople.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import ru.prjpeople.model.Person;
import ru.prjpeople.model.Position;
import ru.prjpeople.model.controller.PersonController;

/**
 *
 * @author Vladimir
 */
public class SavePersonServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //Person person = PersonController.getPerson();
        //processRequest(request, response);
        request.setCharacterEncoding("UTF-8");

        String name = request.getParameter("name");
        String lastName = request.getParameter("lastName");
        String patronymic = request.getParameter("patronymic");


        // TODO: Добавить валидацию на Ф,И,О, Должность.
        // Тебе могут прислать левые значения. Обязательно прочитай про SQL-инъекции.
        // Если Ф, или И, или О ноль или меньше 2ух символов, верни человека на предыдущую страницу,
        // сохранив его введенные параметры (т.е. форма создания/редактроаания должна быть заполнена его данными),
        // А так же сообщи ему об оштбке - "имя должно быть больше 1ого символа, или "вы не выбрали должность".
        // Добавь в селект дефолтовое значение "выберите должность".
        String errorMessage = "Введены неверные данные: ";

        String msg = null;
        //с форматированием какая-то беда приключилась. Пиши в строчку. Несмотря на то, что твоя нотация читабельна
        //по Java code convention (как-то так называется), условия таким образом не оформляются.
        if(lastName.length() < 2
           ||
           name.length() < 2
           ||
           patronymic.length() < 2) {
            msg = "ФИО должны быть не меньше одного символа";
            errorMessage +=  msg;

        }

        //TODO: add try/catch.
        //Что случится, если тебе пришлют параметр "Блаблабла" или "Я хакнул Твое Приложение" ?
        Position position = null;
        try {
            position = Position.valueOf(request.getParameter("position"));
        }
        catch (Exception e) {
            if(msg == null) {
                errorMessage += "вы не выбрали должность. ";
            }
            else {
                errorMessage += ", не выбрана должность. ";
            }
        }

        int key = 0;
        //если ИД не ИД, то делаем новою персона
        try {
            key = Integer.parseInt(request.getParameter("personID"));
        }
        catch (Exception e) {
            key = 0;
        }

        if (position != null
            && msg == null ) {
            //создаем или изменяем персону

            if (key == 0) {
                //новая персона
                Person newPerson = new Person(lastName, name, patronymic, position);
                PersonController.addPerson(newPerson);
            }
            else {
                //редактируем
                Person person = PersonController.getPerson(key);
                person.setFullName(lastName, name, patronymic);
                person.setPosition(position);
            }
            response.sendRedirect("");
        }
        else {
            // неправильные данные, шлем пользователя на предыдущую страницу
            request.setAttribute("errorMessage", errorMessage);
            if(key == 0) {
                if(position != null) {
                    request.setAttribute("position", position.name());
                }
                request.setAttribute("lastName", lastName);
                request.setAttribute("name", name);
                request.setAttribute("patronymic", patronymic);
                request.getRequestDispatcher("/").forward(request, response);
            }
            else {
                request.setAttribute("saveError", "true");
                request.getRequestDispatcher("/editperson?personID="
                + Integer.toString(key)).forward(request, response);
            }
        }
        //request.getRequestDispatcher("/").forward(request, response);
    }
}
